package br.com.viewcar.web.bean;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.viewcar.entity.Equipamento;
import br.com.viewcar.entity.Usuario;
import br.com.viewcar.entity.Veiculo;
import br.com.viewcar.service.VeiculoService;
import br.com.viewcar.util.CheckrotaUtil;

@Scope("session")
@Component("mobileBean")
public class MobileBean extends EntityBean<Integer, Veiculo> {


	private Integer comandoId;

	private String message = "";

	@Autowired
	private VeiculoService veiculoService;

	private boolean statusSenhaBloqueio = false;
	private Boolean statusMessageSuccess = false;
	private Boolean statusMessageFail = false;
	private Boolean popupBloqueio = false;
	private String senhaBloqueio;
	private String procedimentoOcorrencia;

	@Autowired
	private VeiculoService service;

	protected Integer retrieveEntityId(Veiculo entity) {
		return entity.getId();
	}

	protected VeiculoService retrieveEntityService() {
		return this.service;
	}

	protected Veiculo createNewEntity() {

		Veiculo veiculo = new Veiculo();
		veiculo.setEquipamento(new Equipamento());
		//veiculo.setAreas(new ArrayList<Area>());
		this.statusMessageSuccess = false;
		this.statusMessageFail = false;
		return veiculo;
	}

	public List<Veiculo> getEntities() {

		if (this.entities == null) {
			this.entities = retrieveEntityService().retrieveAll();
		}
		return super.getEntities();
	}

	public String cancelar(){

		this.statusSenhaBloqueio = false;
		this.statusMessageSuccess = false;
		this.statusMessageFail = false;
		return SUCCESS;
	}

	public String populate(){
		this.statusMessageSuccess = false;
		this.statusMessageFail = false;
		return SUCCESS;
	}

	public String prepareLigarSirene(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String prepareDesligarSirene(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String prepareBloquear(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String prepareDesbloquear(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String prepareBloquearLigarSirene(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String prepareDesbloquearDesligarSirene(){
		this.statusSenhaBloqueio = true;
		return SUCCESS;
	}

	public String ligarSirene() {

		if(validarSenhaCorte()){
			procedimentoOcorrencia = null;
			Veiculo veiculoAction = veiculoService.retrieve(this.entity.getId());
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = true;
			this.statusMessageFail = false;
			this.message = " >> Sirene ligada.";
			return SUCCESS;
		} else {
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = false;
			this.statusMessageFail = true;
			this.message = " >> Senha incorreta!";
			return FAIL;
		}
	}

	public String desligarSirene() {

		if(validarSenhaCorte()){
			procedimentoOcorrencia = null;
			Veiculo veiculoAction = veiculoService.retrieve(this.entity.getId());
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = true;
			this.statusMessageFail = false;
			this.message = " >> Sirene desligada.";
			return SUCCESS;

		} else {
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = false;
			this.statusMessageFail = false;
			this.message = " >> Senha incorreta!";
			return FAIL;
		}
	}

	public String bloquear() {

		if(validarSenhaCorte()){
			procedimentoOcorrencia = null;
			Veiculo veiculoAction = veiculoService.retrieve(this.entity.getId());
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = true;
			this.statusMessageFail = false;
			this.message = " >> Veiculo bloqueado.";
			return SUCCESS;
		} else {
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = false;
			this.statusMessageFail = true;
			this.message = " >> Senha incorreta!";
			return FAIL;
		}
	}

	public String desbloquear() {

		if(validarSenhaCorte()){
			procedimentoOcorrencia = null;
			Veiculo veiculoAction = veiculoService.retrieve(this.entity.getId());
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = true;
			this.statusMessageFail = false;
			this.message = " >> Veiculo desbloqueado.";
			return SUCCESS;

		} else {
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = false;
			this.statusMessageFail = true;
			this.message = " >> Senha incorreta!";
			return FAIL;
		}
	}
	
	public String bloquearLigarSirene() {

		if(validarSenhaCorte()){
			procedimentoOcorrencia = null;
			Veiculo veiculoAction = veiculoService.retrieve(this.entity.getId());
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = true;
			this.statusMessageFail = false;
			this.message = " >> Veiculo desbloqueado.";
			return SUCCESS;
		} else {
			this.statusSenhaBloqueio = false;
			this.statusMessageSuccess = false;
			this.statusMessageFail = true;
			this.message = " >> Senha incorreta!";
			return FAIL;
		}
	}

	private boolean validarSenhaCorte() {
		Usuario usuario = CheckrotaUtil.retrieveUsuarioLogado();
		String senhaCorte = usuario.getSenhaCorte();
		if (senhaCorte != null && senhaCorte.length() > 1) {
			return senhaCorte.equals(this.senhaBloqueio);
		}
		return false;
	}

	public boolean isStatusSenhaBloqueio() {
		return statusSenhaBloqueio;
	}

	public void setStatusSenhaBloqueio(boolean statusSenhaBloqueio) {
		this.statusSenhaBloqueio = statusSenhaBloqueio;
	}

	public Boolean getPopupBloqueio() {
		return popupBloqueio;
	}

	public void setPopupBloqueio(Boolean popupBloqueio) {
		this.popupBloqueio = popupBloqueio;
	}

	public String getSenhaBloqueio() {
		return senhaBloqueio;
	}

	public void setSenhaBloqueio(String senhaBloqueio) {
		this.senhaBloqueio = senhaBloqueio;
	}

	public String getProcedimentoOcorrencia() {
		return procedimentoOcorrencia;
	}

	public void setProcedimentoOcorrencia(String procedimentoOcorrencia) {
		this.procedimentoOcorrencia = procedimentoOcorrencia;
	}

	public Integer getComandoId() {
		return comandoId;
	}

	public void setComandoId(Integer comandoId) {
		this.comandoId = comandoId;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public Boolean getStatusMessageSuccess() {
		return statusMessageSuccess;
	}

	public void setStatusMessageSuccess(Boolean statusMessageSuccess) {
		this.statusMessageSuccess = statusMessageSuccess;
	}

	public Boolean getStatusMessageFail() {
		return statusMessageFail;
	}

	public void setStatusMessageFail(Boolean statusMessageFail) {
		this.statusMessageFail = statusMessageFail;
	}
}